using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;
using EntGuayasSLA.BL.Listas.Criterias;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Autor: Luis Cuenca
    /// Fecha: 6/4/2013 5:44:39 PM
    /// </summary>
    [Serializable]
    public class LicenciamientoLista : ReadOnlyListBase<LicenciamientoLista, LicenciamientoInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(LicenciamientoLista), "Role");
        }

        #endregion

        #region Factory Methods

        public static LicenciamientoLista GetLicenciamientoLista(ExpedienteCriteria filter)
        {
            return DataPortal.Fetch<LicenciamientoLista>(filter);
        }

        private LicenciamientoLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void DataPortal_Fetch(ExpedienteCriteria criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_codigo", criteria.Codigo),
                        new Parametro("ec_nombre", criteria.Nombre),
                        new Parametro("ec_prv_id", criteria.ProvinciaId),
                        new Parametro("ec_can_id", criteria.CantonId),
                        new Parametro("ec_par_id", criteria.ParroquiaId),
                        new Parametro("ec_rol", criteria.CodigoRol),
                        new Parametro("ec_per_id", criteria.PersonaId),
                        new Parametro("ef_exp_fecha_d", criteria.FechaDesde),
                        new Parametro("ef_exp_fecha_a", criteria.FechaHasta)
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_LICENCIAMIENTO\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(LicenciamientoInfo.GetLicenciamientoInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }

        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: Luis Cuenca
    /// Fecha: 6/4/2013 5:44:39 PM
    /// </summary>
    [Serializable]
    public class LicenciamientoInfo : ReadOnlyBase<LicenciamientoInfo>
    {
        #region Business Methods

        public Guid Id { get; internal set; }
        public string ExpedienteId { get; internal set; }
        public string Nombre { get; internal set; }
        public string Descripcion { get; internal set; }
        public string Codigo { get; internal set; }
        public string Tipo { get; internal set; }
        public string Categoria { get; internal set; }
        public string Estado { get; internal set; }
        public string Fase { get; internal set; }
        public DateTime FechaCreacion { get; internal set; }
        public string CategoriaExpediente { get; internal set; }
        #region Datos Consultor
        public string ConsultorNombre { get; internal set; }
        public string ConsultorId { get; internal set; }
        #endregion
        #region Datos Ubicacion

        public string Ubicacion {
            get { return string.Format("{0} - {1} - {2}", Provincia, Canton, Parroquia); } 
        }
        public string Provincia { get; internal set; }
        public string Canton { get; internal set; }
        public string Parroquia { get; internal set; }
        public string Direccion { get; internal set; }
        #endregion

        #region Datos Promotor
        public string PromotorIdentificacion { get; internal set; }
        public string PromotorNombre { get; internal set; }
        public string PromotorEmpresa { get; internal set; }
        public string PromotorDireccion { get; internal set; }
        public string Ruc { get; internal set; }
        public string Telefono { get; internal set; }
        public string Celular { get; internal set; }
        public string Fax { get; internal set; }
        #endregion

        #endregion

        #region Factory Methods

        public static LicenciamientoInfo GetLicenciamientoInfo(string eli_id)
        {
            return DataPortal.FetchChild<LicenciamientoInfo>(eli_id);
        }

        internal static LicenciamientoInfo GetLicenciamientoInfo(DataRow childData)
        {
            return DataPortal.FetchChild<LicenciamientoInfo>(childData);
        }

        private LicenciamientoInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void Child_Fetch(string eli_id)
        {
            
        }

        private void Child_Fetch(DataRow childData)
        {
            Id = Guid.Parse(childData["eli_id"].ToString());
            ExpedienteId = childData["exp_id"].ToString();
            Codigo = childData["eli_codigo"].ToString();//
            Tipo = childData["eli_tipo"].ToString();
            Categoria = childData["eli_categoria"].ToString();
            Estado = childData["eli_estado"].ToString();
            FechaCreacion =DateTime.Parse(childData["eli_fecha_creacion"].ToString());
            if (childData["con_id"] != null)
            {
                ConsultorId = childData["con_id"].ToString();
            }
            Provincia = childData["prv_nombre"].ToString();
            Canton = childData["can_nombre"].ToString();
            Parroquia = childData["par_nombre"].ToString();
            Direccion = childData["exp_direccion"].ToString();
            PromotorNombre = childData["nombres"].ToString();
            PromotorIdentificacion = childData["per_identificacion"].ToString();
            if (childData["pro_razon_social"] != null)
                PromotorEmpresa = childData["pro_razon_social"].ToString();
            if (childData["pro_ruc"] != null)
                Ruc = childData["pro_ruc"].ToString();
            Telefono = childData["pro_telefono"].ToString();
            Celular = childData["pro_telefono_celular"].ToString();
            Fax = childData["pro_fax"].ToString();
            Nombre = childData["exp_nombre"].ToString();
            CategoriaExpediente = childData["exp_categoria"].ToString();
        }

        #endregion
    }
}
